home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Online / cnetdevice / src / include / ref / if_edreg.h < prev    next >
Text File  |  1996-04-29  |  28KB  |  1,004 lines

  1. /*
  2.  * Copyright (C) 1993, David Greenman. This software may be used, modified,
  3.  *   copied, distributed, and sold, in both source and binary form provided
  4.  *   that the above copyright and these terms are retained. Under no
  5.  *   circumstances is the author responsible for the proper functioning
  6.  *   of this software, nor does the author assume any responsibility
  7.  *   for damages incurred with its use.
  8.  *
  9.  * $Id: if_edreg.h,v 1.20 1996/01/30 22:55:38 mpp Exp $
  10.  */
  11. /*
  12.  * National Semiconductor DS8390 NIC register definitions
  13.  *
  14.  *
  15.  * Modification history
  16.  *
  17.  * Revision 2.2  1993/11/29  16:33:39  davidg
  18.  * From Thomas Sandford <t.d.g.sandford@comp.brad.ac.uk>
  19.  * Add support for the 8013W board type
  20.  *
  21.  * Revision 2.1  1993/11/22  10:52:33  davidg
  22.  * patch to add support for SMC8216 (Elite-Ultra) boards
  23.  * from Glen H. Lowe
  24.  *
  25.  * Revision 2.0  93/09/29  00:37:15  davidg
  26.  * changed double buffering flag to multi buffering
  27.  * made changes/additions for 3c503 multi-buffering
  28.  * ...companion to Rev. 2.0 of 'ed' driver.
  29.  *
  30.  * Revision 1.1  93/06/23  03:01:07  davidg
  31.  * Initial revision
  32.  *
  33.  */
  34.  
  35. /*
  36.  * Page 0 register offsets
  37.  */
  38. #define ED_P0_CR    0x00    /* Command Register */
  39.  
  40. #define ED_P0_CLDA0    0x01    /* Current Local DMA Addr low (read) */
  41. #define ED_P0_PSTART    0x01    /* Page Start register (write) */
  42.  
  43. #define ED_P0_CLDA1    0x02    /* Current Local DMA Addr high (read) */
  44. #define ED_P0_PSTOP    0x02    /* Page Stop register (write) */
  45.  
  46. #define ED_P0_BNRY    0x03    /* Boundary Pointer */
  47.  
  48. #define ED_P0_TSR    0x04    /* Transmit Status Register (read) */
  49. #define ED_P0_TPSR    0x04    /* Transmit Page Start (write) */
  50.  
  51. #define ED_P0_NCR    0x05    /* Number of Collisions Reg (read) */
  52. #define ED_P0_TBCR0    0x05    /* Transmit Byte count, low (write) */
  53.  
  54. #define ED_P0_FIFO    0x06    /* FIFO register (read) */
  55. #define ED_P0_TBCR1    0x06    /* Transmit Byte count, high (write) */
  56.  
  57. #define ED_P0_ISR    0x07    /* Interrupt Status Register */
  58.  
  59. #define ED_P0_CRDA0    0x08    /* Current Remote DMA Addr low (read) */
  60. #define ED_P0_RSAR0    0x08    /* Remote Start Address low (write) */
  61.  
  62. #define ED_P0_CRDA1    0x09    /* Current Remote DMA Addr high (read) */
  63. #define ED_P0_RSAR1    0x09    /* Remote Start Address high (write) */
  64.  
  65. #define ED_P0_RBCR0    0x0a    /* Remote Byte Count low (write) */
  66.  
  67. #define ED_P0_RBCR1    0x0b    /* Remote Byte Count high (write) */
  68.  
  69. #define ED_P0_RSR    0x0c    /* Receive Status (read) */
  70. #define ED_P0_RCR    0x0c    /* Receive Configuration Reg (write) */
  71.  
  72. #define ED_P0_CNTR0    0x0d    /* frame alignment error counter (read) */
  73. #define ED_P0_TCR    0x0d    /* Transmit Configuration Reg (write) */
  74.  
  75. #define ED_P0_CNTR1    0x0e    /* CRC error counter (read) */
  76. #define ED_P0_DCR    0x0e    /* Data Configuration Reg (write) */
  77.  
  78. #define ED_P0_CNTR2    0x0f    /* missed packet counter (read) */
  79. #define ED_P0_IMR    0x0f    /* Interrupt Mask Register (write) */
  80.  
  81. /*
  82.  * Page 1 register offsets
  83.  */
  84. #define ED_P1_CR    0x00    /* Command Register */
  85. #define ED_P1_PAR0    0x01    /* Physical Address Register 0 */
  86. #define ED_P1_PAR1    0x02    /* Physical Address Register 1 */
  87. #define ED_P1_PAR2    0x03    /* Physical Address Register 2 */
  88. #define ED_P1_PAR3    0x04    /* Physical Address Register 3 */
  89. #define ED_P1_PAR4    0x05    /* Physical Address Register 4 */
  90. #define ED_P1_PAR5    0x06    /* Physical Address Register 5 */
  91. #define ED_P1_CURR    0x07    /* Current RX ring-buffer page */
  92. #define ED_P1_MAR0    0x08    /* Multicast Address Register 0 */
  93. #define ED_P1_MAR1    0x09    /* Multicast Address Register 1 */
  94. #define ED_P1_MAR2    0x0a    /* Multicast Address Register 2 */
  95. #define ED_P1_MAR3    0x0b    /* Multicast Address Register 3 */
  96. #define ED_P1_MAR4    0x0c    /* Multicast Address Register 4 */
  97. #define ED_P1_MAR5    0x0d    /* Multicast Address Register 5 */
  98. #define ED_P1_MAR6    0x0e    /* Multicast Address Register 6 */
  99. #define ED_P1_MAR7    0x0f    /* Multicast Address Register 7 */
  100.  
  101. /*
  102.  * Page 2 register offsets
  103.  */
  104. #define ED_P2_CR    0x00    /* Command Register */
  105. #define ED_P2_PSTART    0x01    /* Page Start (read) */
  106. #define ED_P2_CLDA0    0x01    /* Current Local DMA Addr 0 (write) */
  107. #define ED_P2_PSTOP    0x02    /* Page Stop (read) */
  108. #define ED_P2_CLDA1    0x02    /* Current Local DMA Addr 1 (write) */
  109. #define ED_P2_RNPP    0x03    /* Remote Next Packet Pointer */
  110. #define ED_P2_TPSR    0x04    /* Transmit Page Start (read) */
  111. #define ED_P2_LNPP    0x05    /* Local Next Packet Pointer */
  112. #define ED_P2_ACU    0x06    /* Address Counter Upper */
  113. #define ED_P2_ACL    0x07    /* Address Counter Lower */
  114. #define ED_P2_RCR    0x0c    /* Receive Configuration Register (read) */
  115. #define ED_P2_TCR    0x0d    /* Transmit Configuration Register (read) */
  116. #define ED_P2_DCR    0x0e    /* Data Configuration Register (read) */
  117. #define ED_P2_IMR    0x0f    /* Interrupt Mask Register (read) */
  118.  
  119. /*
  120.  *        Command Register (CR) definitions
  121.  */
  122.  
  123. /*
  124.  * STP: SToP. Software reset command. Takes the controller offline. No
  125.  *    packets will be received or transmitted. Any reception or
  126.  *    transmission in progress will continue to completion before
  127.  *    entering reset state. To exit this state, the STP bit must
  128.  *    reset and the STA bit must be set. The software reset has
  129.  *    executed only when indicated by the RST bit in the ISR being
  130.  *    set.
  131.  */
  132. #define ED_CR_STP    0x01
  133.  
  134. /*
  135.  * STA: STArt. This bit is used to activate the NIC after either power-up,
  136.  *    or when the NIC has been put in reset mode by software command
  137.  *    or error.
  138.  */
  139. #define ED_CR_STA    0x02
  140.  
  141. /*
  142.  * TXP: Transmit Packet. This bit must be set to indicate transmission of
  143.  *    a packet. TXP is internally reset either after the transmission is
  144.  *    completed or aborted. This bit should be set only after the Transmit
  145.  *    Byte Count and Transmit Page Start register have been programmed.
  146.  */
  147. #define ED_CR_TXP    0x04
  148.  
  149. /*
  150.  * RD0, RD1, RD2: Remote DMA Command. These three bits control the operation
  151.  *    of the remote DMA channel. RD2 can be set to abort any remote DMA
  152.  *    command in progress. The Remote Byte Count registers should be cleared
  153.  *    when a remote DMA has been aborted. The Remote Start Addresses are not
  154.  *    restored to the starting address if the remote DMA is aborted.
  155.  *
  156.  *    RD2 RD1 RD0    function
  157.  *     0   0   0    not allowed
  158.  *     0   0   1    remote read
  159.  *     0   1   0    remote write
  160.  *     0   1   1    send packet
  161.  *     1   X   X    abort
  162.  */
  163. #define ED_CR_RD0    0x08
  164. #define ED_CR_RD1    0x10
  165. #define ED_CR_RD2    0x20
  166.  
  167. /*
  168.  * PS0, PS1: Page Select. The two bits select which register set or 'page' to
  169.  *    access.
  170.  *
  171.  *    PS1 PS0        page
  172.  *     0   0        0
  173.  *     0   1        1
  174.  *     1   0        2
  175.  *     1   1        reserved
  176.  */
  177. #define ED_CR_PS0    0x40
  178. #define ED_CR_PS1    0x80
  179. /* bit encoded aliases */
  180. #define ED_CR_PAGE_0    0x00 /* (for consistency) */
  181. #define ED_CR_PAGE_1    0x40
  182. #define ED_CR_PAGE_2    0x80
  183.  
  184. /*
  185.  *        Interrupt Status Register (ISR) definitions
  186.  */
  187.  
  188. /*
  189.  * PRX: Packet Received. Indicates packet received with no errors.
  190.  */
  191. #define ED_ISR_PRX    0x01
  192.  
  193. /*
  194.  * PTX: Packet Transmitted. Indicates packet transmitted with no errors.
  195.  */
  196. #define ED_ISR_PTX    0x02
  197.  
  198. /*
  199.  * RXE: Receive Error. Indicates that a packet was received with one or more
  200.  *    the following errors: CRC error, frame alignment error, FIFO overrun,
  201.  *    missed packet.
  202.  */
  203. #define ED_ISR_RXE    0x04
  204.  
  205. /*
  206.  * TXE: Transmission Error. Indicates that an attempt to transmit a packet
  207.  *    resulted in one or more of the following errors: excessive
  208.  *    collisions, FIFO underrun.
  209.  */
  210. #define ED_ISR_TXE    0x08
  211.  
  212. /*
  213.  * OVW: OverWrite. Indicates a receive ring-buffer overrun. Incoming network
  214.  *    would exceed (has exceeded?) the boundary pointer, resulting in data
  215.  *    that was previously received and not yet read from the buffer to be
  216.  *    overwritten.
  217.  */
  218. #define ED_ISR_OVW    0x10
  219.  
  220. /*
  221.  * CNT: Counter Overflow. Set when the MSB of one or more of the Network Talley
  222.  *    Counters has been set.
  223.  */
  224. #define ED_ISR_CNT    0x20
  225.  
  226. /*
  227.  * RDC: Remote Data Complete. Indicates that a Remote DMA operation has completed.
  228.  */
  229. #define ED_ISR_RDC    0x40
  230.  
  231. /*
  232.  * RST: Reset status. Set when the NIC enters the reset state and cleared when a
  233.  *    Start Command is issued to the CR. This bit is also set when a receive
  234.  *    ring-buffer overrun (OverWrite) occurs and is cleared when one or more
  235.  *    packets have been removed from the ring. This is a read-only bit.
  236.  */
  237. #define ED_ISR_RST    0x80
  238.  
  239. /*
  240.  *        Interrupt Mask Register (IMR) definitions
  241.  */
  242.  
  243. /*
  244.  * PRXE: Packet Received interrupt Enable. If set, a received packet will cause
  245.  *    an interrupt.
  246.  */
  247. #define ED_IMR_PRXE    0x01
  248.  
  249. /*
  250.  * PTXE: Packet Transmit interrupt Enable. If set, an interrupt is generated when
  251.  *    a packet transmission completes.
  252.  */
  253. #define ED_IMR_PTXE    0x02
  254.  
  255. /*
  256.  * RXEE: Receive Error interrupt Enable. If set, an interrupt will occur whenever a
  257.  *    packet is received with an error.
  258.  */
  259. #define ED_IMR_RXEE     0x04
  260.  
  261. /*
  262.  * TXEE: Transmit Error interrupt Enable. If set, an interrupt will occur whenever
  263.  *    a transmission results in an error.
  264.  */
  265. #define ED_IMR_TXEE    0x08
  266.  
  267. /*
  268.  * OVWE: OverWrite error interrupt Enable. If set, an interrupt is generated whenever
  269.  *    the receive ring-buffer is overrun. i.e. when the boundary pointer is exceeded.
  270.  */
  271. #define ED_IMR_OVWE    0x10
  272.  
  273. /*
  274.  * CNTE: Counter overflow interrupt Enable. If set, an interrupt is generated whenever
  275.  *    the MSB of one or more of the Network Statistics counters has been set.
  276.  */
  277. #define ED_IMR_CNTE    0x20
  278.  
  279. /*
  280.  * RDCE: Remote DMA Complete interrupt Enable. If set, an interrupt is generated
  281.  *    when a remote DMA transfer has completed.
  282.  */
  283. #define ED_IMR_RDCE    0x40
  284.  
  285. /*
  286.  * bit 7 is unused/reserved
  287.  */
  288.  
  289. /*
  290.  *        Data Configuration Register (DCR) definitions
  291.  */
  292.  
  293. /*
  294.  * WTS: Word Transfer Select. WTS establishes byte or word transfers for
  295.  *    both remote and local DMA transfers
  296.  */
  297. #define ED_DCR_WTS    0x01
  298.  
  299. /*
  300.  * BOS: Byte Order Select. BOS sets the byte order for the host.
  301.  *    Should be 0 for 80x86, and 1 for 68000 series processors
  302.  */
  303. #define ED_DCR_BOS    0x02
  304.  
  305. /*
  306.  * LAS: Long Address Select. When LAS is 1, the contents of the remote
  307.  *    DMA registers RSAR0 and RSAR1 are used to provide A16-A31
  308.  */
  309. #define ED_DCR_LAS    0x04
  310.  
  311. /*
  312.  * LS: Loopback Select. When 0, loopback mode is selected. Bits D1 and D2
  313.  *    of the TCR must also be programmed for loopback operation.
  314.  *    When 1, normal operation is selected.
  315.  */
  316. #define ED_DCR_LS    0x08
  317.  
  318. /*
  319.  * AR: Auto-initialize Remote. When 0, data must be removed from ring-buffer
  320.  *    under program control. When 1, remote DMA is automatically initiated
  321.  *    and the boundary pointer is automatically updated
  322.  */
  323. #define ED_DCR_AR    0x10
  324.  
  325. /*
  326.  * FT0, FT1: Fifo Threshold select.
  327.  *        FT1    FT0    Word-width    Byte-width
  328.  *         0     0    1 word        2 bytes
  329.  *         0     1    2 words        4 bytes
  330.  *         1     0    4 words        8 bytes
  331.  *         1     1    8 words        12 bytes
  332.  *
  333.  *    During transmission, the FIFO threshold indicates the number of bytes
  334.  *    or words that the FIFO has filled from the local DMA before BREQ is
  335.  *    asserted. The transmission threshold is 16 bytes minus the receiver
  336.  *    threshold.
  337.  */
  338. #define ED_DCR_FT0    0x20
  339. #define ED_DCR_FT1    0x40
  340.  
  341. /*
  342.  * bit 7 (0x80) is unused/reserved
  343.  */
  344.  
  345. /*
  346.  *        Transmit Configuration Register (TCR) definitions
  347.  */
  348.  
  349. /*
  350.  * CRC: Inhibit CRC. If 0, CRC will be appended by the transmitter, if 0, CRC
  351.  *    is not appended by the transmitter.
  352.  */
  353. #define ED_TCR_CRC    0x01
  354.  
  355. /*
  356.  * LB0, LB1: Loopback control. These two bits set the type of loopback that is
  357.  *    to be performed.
  358.  *
  359.  *    LB1 LB0        mode
  360.  *     0   0        0 - normal operation (DCR_LS = 0)
  361.  *     0   1        1 - internal loopback (DCR_LS = 0)
  362.  *     1   0        2 - external loopback (DCR_LS = 1)
  363.  *     1   1        3 - external loopback (DCR_LS = 0)
  364.  */
  365. #define ED_TCR_LB0    0x02
  366. #define ED_TCR_LB1    0x04
  367.  
  368. /*
  369.  * ATD: Auto Transmit Disable. Clear for normal operation. When set, allows
  370.  *    another station to disable the NIC's transmitter by transmitting to
  371.  *    a multicast address hashing to bit 62. Reception of a multicast address
  372.  *    hashing to bit 63 enables the transmitter.
  373.  */
  374. #define ED_TCR_ATD    0x08
  375.  
  376. /*
  377.  * OFST: Collision Offset enable. This bit when set modifies the backoff
  378.  *    algorithm to allow prioritization of nodes.
  379.  */
  380. #define ED_TCR_OFST    0x10
  381.  
  382. /*
  383.  * bits 5, 6, and 7 are unused/reserved
  384.  */
  385.  
  386. /*
  387.  *        Transmit Status Register (TSR) definitions
  388.  */
  389.  
  390. /*
  391.  * PTX: Packet Transmitted. Indicates successful transmission of packet.
  392.  */
  393. #define ED_TSR_PTX    0x01
  394.  
  395. /*
  396.  * bit 1 (0x02) is unused/reserved
  397.  */
  398.  
  399. /*
  400.  * COL: Transmit Collided. Indicates that the transmission collided at least
  401.  *    once with another station on the network.
  402.  */
  403. #define ED_TSR_COL    0x04
  404.  
  405. /*
  406.  * ABT: Transmit aborted. Indicates that the transmission was aborted due to
  407.  *    excessive collisions.
  408.  */
  409. #define ED_TSR_ABT    0x08
  410.  
  411. /*
  412.  * CRS: Carrier Sense Lost. Indicates that carrier was lost during the
  413.  *    transmission of the packet. (Transmission is not aborted because
  414.  *    of a loss of carrier)
  415.  */
  416. #define ED_TSR_CRS    0x10
  417.  
  418. /*
  419.  * FU: FIFO Underrun. Indicates that the NIC wasn't able to access bus/
  420.  *    transmission memory before the FIFO emptied. Transmission of the
  421.  *    packet was aborted.
  422.  */
  423. #define ED_TSR_FU    0x20
  424.  
  425. /*
  426.  * CDH: CD Heartbeat. Indicates that the collision detection circuitry
  427.  *    isn't working correctly during a collision heartbeat test.
  428.  */
  429. #define ED_TSR_CDH    0x40
  430.  
  431. /*
  432.  * OWC: Out of Window Collision: Indicates that a collision occurred after
  433.  *    a slot time (51.2us). The transmission is rescheduled just as in
  434.  *    normal collisions.
  435.  */
  436. #define ED_TSR_OWC    0x80
  437.  
  438. /*
  439.  *        Receiver Configuration Register (RCR) definitions
  440.  */
  441.  
  442. /*
  443.  * SEP: Save Errored Packets. If 0, error packets are discarded. If set to 1,
  444.  *    packets with CRC and frame errors are not discarded.
  445.  */
  446. #define ED_RCR_SEP    0x01
  447.  
  448. /*
  449.  * AR: Accept Runt packet. If 0, packet with less than 64 byte are discarded.
  450.  *    If set to 1, packets with less than 64 byte are not discarded.
  451.  */
  452. #define ED_RCR_AR    0x02
  453.  
  454. /*
  455.  * AB: Accept Broadcast. If set, packets sent to the broadcast address will be
  456.  *    accepted.
  457.  */
  458. #define ED_RCR_AB    0x04
  459.  
  460. /*
  461.  * AM: Accept Multicast. If set, packets sent to a multicast address are checked
  462.  *    for a match in the hashing array. If clear, multicast packets are ignored.
  463.  */
  464. #define ED_RCR_AM    0x08
  465.  
  466. /*
  467.  * PRO: Promiscuous Physical. If set, all packets with a physical addresses are
  468.  *    accepted. If clear, a physical destination address must match this
  469.  *    station's address. Note: for full promiscuous mode, RCR_AB and RCR_AM
  470.  *    must also be set. In addition, the multicast hashing array must be set
  471.  *    to all 1's so that all multicast addresses are accepted.
  472.  */
  473. #define ED_RCR_PRO    0x10
  474.  
  475. /*
  476.  * MON: Monitor Mode. If set, packets will be checked for good CRC and framing,
  477.  *    but are not stored in the ring-buffer. If clear, packets are stored (normal
  478.  *    operation).
  479.  */
  480. #define ED_RCR_MON    0x20
  481.  
  482. /*
  483.  * bits 6 and 7 are unused/reserved.
  484.  */
  485.  
  486. /*
  487.  *        Receiver Status Register (RSR) definitions
  488.  */
  489.  
  490. /*
  491.  * PRX: Packet Received without error.
  492.  */
  493. #define ED_RSR_PRX    0x01
  494.  
  495. /*
  496.  * CRC: CRC error. Indicates that a packet has a CRC error. Also set for frame
  497.  *    alignment errors.
  498.  */
  499. #define ED_RSR_CRC    0x02
  500.  
  501. /*
  502.  * FAE: Frame Alignment Error. Indicates that the incoming packet did not end on
  503.  *    a byte boundary and the CRC did not match at the last byte boundary.
  504.  */
  505. #define ED_RSR_FAE    0x04
  506.  
  507. /*
  508.  * FO: FIFO Overrun. Indicates that the FIFO was not serviced (during local DMA)
  509.  *    causing it to overrun. Reception of the packet is aborted.
  510.  */
  511. #define ED_RSR_FO    0x08
  512.  
  513. /*
  514.  * MPA: Missed Packet. Indicates that the received packet couldn't be stored in
  515.  *    the ring-buffer because of insufficient buffer space (exceeding the
  516.  *    boundary pointer), or because the transfer to the ring-buffer was inhibited
  517.  *    by RCR_MON - monitor mode.
  518.  */
  519. #define ED_RSR_MPA    0x10
  520.  
  521. /*
  522.  * PHY: Physical address. If 0, the packet received was sent to a physical address.
  523.  *    If 1, the packet was accepted because of a multicast/broadcast address
  524.  *    match.
  525.  */
  526. #define ED_RSR_PHY    0x20
  527.  
  528. /*
  529.  * DIS: Receiver Disabled. Set to indicate that the receiver has entered monitor
  530.  *    mode. Cleared when the receiver exits monitor mode.
  531.  */
  532. #define ED_RSR_DIS    0x40
  533.  
  534. /*
  535.  * DFR: Deferring. Set to indicate a 'jabber' condition. The CRS and COL inputs
  536.  *    are active, and the transceiver has set the CD line as a result of the
  537.  *    jabber.
  538.  */
  539. #define ED_RSR_DFR    0x80
  540.  
  541. /*
  542.  * receive ring descriptor
  543.  *
  544.  * The National Semiconductor DS8390 Network interface controller uses
  545.  * the following receive ring headers.  The way this works is that the
  546.  * memory on the interface card is chopped up into 256 bytes blocks.
  547.  * A contiguous portion of those blocks are marked for receive packets
  548.  * by setting start and end block #'s in the NIC.  For each packet that
  549.  * is put into the receive ring, one of these headers (4 bytes each) is
  550.  * tacked onto the front. The first byte is a copy of the receiver status
  551.  * register at the time the packet was received.
  552.  */
  553. struct ed_ring    {
  554.     u_char    rsr;            /* receiver status */
  555.     u_char    next_packet;        /* pointer to next packet    */
  556.     u_short    count;            /* bytes in packet (length + 4)    */
  557. };
  558.  
  559. /*
  560.  *                 Common constants
  561.  */
  562. #define ED_PAGE_SIZE        256        /* Size of RAM pages in bytes */
  563. #define ED_TXBUF_SIZE        6        /* Size of TX buffer in pages */
  564.  
  565. /*
  566.  * Vendor types
  567.  */
  568. #define ED_VENDOR_WD_SMC    0x00        /* Western Digital/SMC */
  569. #define ED_VENDOR_3COM        0x01        /* 3Com */
  570. #define ED_VENDOR_NOVELL    0x02        /* Novell */
  571. #define ED_VENDOR_PCCARD    0x03        /* PCMCIA/PCCARD */
  572.  
  573. /*
  574.  * Compile-time config flags
  575.  */
  576. /*
  577.  * this sets the default for enabling/disabling the transceiver
  578.  */
  579. #define ED_FLAGS_DISABLE_TRANCEIVER    0x0001
  580.  
  581. /*
  582.  * This forces the board to be used in 8/16bit mode even if it
  583.  *    autoconfigs differently
  584.  */
  585. #define ED_FLAGS_FORCE_8BIT_MODE    0x0002
  586. #define ED_FLAGS_FORCE_16BIT_MODE    0x0004
  587.  
  588. /*
  589.  * This disables the use of double transmit buffers.
  590.  */
  591. #define ED_FLAGS_NO_MULTI_BUFFERING    0x0008
  592.  
  593. /*
  594.  * This forces all operations with the NIC memory to use Programmed
  595.  *    I/O (i.e. not via shared memory)
  596.  */
  597. #define ED_FLAGS_FORCE_PIO        0x0010
  598.  
  599. /*
  600.  *        Definitions for Western digital/SMC WD80x3 series ASIC
  601.  */
  602. /*
  603.  * Memory Select Register (MSR)
  604.  */
  605. #define ED_WD_MSR    0
  606.  
  607. /* next three definitions for Toshiba */
  608. #define ED_WD_MSR_POW    0x02    /* 0 = power save, 1 = normal (R/W) */
  609. #define ED_WD_MSR_BSY    0x04    /* gate array busy (R) */
  610. #define ED_WD_MSR_LEN    0x20    /* data bus width, 0 = 16 bits,
  611.                    1 = 8 bits (R/W) */
  612. #define ED_WD_MSR_ADDR    0x3f    /* Memory decode bits 18-13 */
  613. #define ED_WD_MSR_MENB    0x40    /* Memory enable */
  614. #define ED_WD_MSR_RST    0x80    /* Reset board */
  615.  
  616. /*
  617.  * Interface Configuration Register (ICR)
  618.  */
  619. #define ED_WD_ICR    1
  620.  
  621. #define ED_WD_ICR_16BIT    0x01    /* 16-bit interface */
  622. #define ED_WD_ICR_OAR    0x02    /* select register. 0=BIO 1=EAR */
  623. #define ED_WD_ICR_IR2    0x04    /* high order bit of encoded IRQ */
  624. #define ED_WD_ICR_MSZ    0x08    /* memory size (0=8k 1=32k) */
  625. #define ED_WD_ICR_RLA    0x10    /* recall LAN address */
  626. #define ED_WD_ICR_RX7    0x20    /* recall all but i/o and LAN address */
  627. #define    ED_WD_ICR_RIO    0x40    /* recall i/o address */
  628. #define ED_WD_ICR_STO    0x80    /* store to non-volatile memory */
  629. #ifdef TOSH_ETHER
  630. #define ED_WD_ICR_MEM    0xe0    /* shared mem address A15-A13 (R/W) */
  631. #define ED_WD_ICR_MSZ1    0x0f    /* memory size, 0x08 = 64K, 0x04 = 32K,
  632.                    0x02 = 16K, 0x01 = 8K */
  633.                 /* 64K can only be used if mem address
  634.                    above 1Mb */
  635.                 /* IAR holds address A23-A16 (R/W) */
  636. #endif
  637.  
  638. /*
  639.  * IO Address Register (IAR)
  640.  */
  641. #define ED_WD_IAR    2
  642.  
  643. /*
  644.  * EEROM Address Register
  645.  */
  646. #define ED_WD_EAR    3
  647.  
  648. /*
  649.  * Interrupt Request Register (IRR)
  650.  */
  651. #define ED_WD_IRR    4
  652.  
  653. #define    ED_WD_IRR_0WS    0x01    /* use 0 wait-states on 8 bit bus */
  654. #define ED_WD_IRR_OUT1    0x02    /* WD83C584 pin 1 output */
  655. #define ED_WD_IRR_OUT2    0x04    /* WD83C584 pin 2 output */
  656. #define ED_WD_IRR_OUT3    0x08    /* WD83C584 pin 3 output */
  657. #define ED_WD_IRR_FLASH    0x10    /* Flash RAM is in the ROM socket */
  658.  
  659. /*
  660.  * The three bits of the encoded IRQ are decoded as follows:
  661.  *
  662.  *    IR2 IR1 IR0    IRQ
  663.  *     0   0   0     2/9
  664.  *     0   0   1     3
  665.  *     0   1   0     5
  666.  *     0   1   1     7
  667.  *     1   0   0     10
  668.  *     1   0   1     11
  669.  *     1   1   0     15
  670.  *     1   1   1     4
  671.  */
  672. #define ED_WD_IRR_IR0    0x20    /* bit 0 of encoded IRQ */
  673. #define ED_WD_IRR_IR1    0x40    /* bit 1 of encoded IRQ */
  674. #define ED_WD_IRR_IEN    0x80    /* Interrupt enable */
  675.  
  676. /*
  677.  * LA Address Register (LAAR)
  678.  */
  679. #define ED_WD_LAAR    5
  680.  
  681. #define ED_WD_LAAR_ADDRHI    0x1f    /* bits 23-19 of RAM address */
  682. #define ED_WD_LAAR_0WS16    0x20    /* enable 0 wait-states on 16 bit bus */
  683. #define ED_WD_LAAR_L16EN    0x40    /* enable 16-bit operation */
  684. #define ED_WD_LAAR_M16EN    0x80    /* enable 16-bit memory access */
  685.  
  686. /* i/o base offset to station address/card-ID PROM */
  687. #define ED_WD_PROM    8
  688.  
  689. /*
  690.  *    83C790 specific registers
  691.  */
  692. /*
  693.  * Hardware Support Register (HWR) ('790)
  694.  */
  695. #define ED_WD790_HWR    4
  696.  
  697. #define WD_WD790_HWR_NUKE    0x10    /* hardware reset */
  698. #define ED_WD790_HWR_LPRM    0x40    /* LAN PROM select */
  699. #define ED_WD790_HWR_SWH    0x80    /* switch register set */
  700.  
  701. /*
  702.  * ICR790 Interrupt Control Register for the 83C790
  703.  */
  704. #define ED_WD790_ICR    6
  705.  
  706. #define ED_WD790_ICR_EIL    0x01    /* enable interrupts */
  707.  
  708. /*
  709.  * REV/IOPA Revision / I/O Pipe register for the 83C79X
  710.  */
  711. #define ED_WD790_REV    7
  712.  
  713. #define ED_WD790    0x20
  714. #define ED_WD795    0x40
  715.  
  716. /*
  717.  * 79X RAM Address Register (RAR)
  718.  *    Enabled with SWH bit=1 in HWR register
  719.  */
  720. #define ED_WD790_RAR    0x0b
  721.  
  722. #define ED_WD790_RAR_SZ8    0x00    /* 8k memory buffer */
  723. #define ED_WD790_RAR_SZ16    0x10    /* 16k memory buffer */
  724. #define ED_WD790_RAR_SZ32    0x20    /* 32k memory buffer */
  725. #define ED_WD790_RAR_SZ64    0x30    /* 64k memory buffer */
  726.  
  727. /*
  728.  * General Control Register (GCR)
  729.  *    Enabled with SWH bit=1 in HWR register
  730.  */
  731. #define ED_WD790_GCR    0x0d
  732.  
  733. #define ED_WD790_GCR_IR0    0x04    /* bit 0 of encoded IRQ */
  734. #define ED_WD790_GCR_IR1    0x08    /* bit 1 of encoded IRQ */
  735. #define ED_WD790_GCR_ZWSEN    0x20    /* zero wait state enable */
  736. #define ED_WD790_GCR_IR2    0x40    /* bit 2 of encoded IRQ */
  737. #define ED_WD790_GCR_LIT    0x01    /* Link Integrity Test Enable */
  738. /*
  739.  * The three bits of the encoded IRQ are decoded as follows:
  740.  *
  741.  *    IR2 IR1 IR0    IRQ
  742.  *     0   0   0     none
  743.  *     0   0   1     9
  744.  *     0   1   0     3
  745.  *     0   1   1     5
  746.  *     1   0   0     7
  747.  *     1   0   1     10
  748.  *     1   1   0     11
  749.  *     1   1   1     15
  750.  */
  751.  
  752. /* i/o base offset to CARD ID */
  753. #define ED_WD_CARD_ID    ED_WD_PROM+6
  754.  
  755. /* Board type codes in card ID */
  756. #define ED_TYPE_WD8003S        0x02
  757. #define ED_TYPE_WD8003E        0x03
  758. #define ED_TYPE_WD8013EBT    0x05
  759. #define ED_TYPE_TOSHIBA1    0x11 /* named PCETA1 */
  760. #define ED_TYPE_TOSHIBA2    0x12 /* named PCETA2 */
  761. #define ED_TYPE_TOSHIBA3    0x13 /* named PCETB  */
  762. #define ED_TYPE_TOSHIBA4    0x14 /* named PCETC  */
  763. #define ED_TYPE_WD8003W        0x24
  764. #define ED_TYPE_WD8003EB    0x25
  765. #define ED_TYPE_WD8013W        0x26
  766. #define ED_TYPE_WD8013EP    0x27
  767. #define ED_TYPE_WD8013WC    0x28
  768. #define ED_TYPE_WD8013EPC    0x29
  769. #define ED_TYPE_SMC8216T    0x2a
  770. #define ED_TYPE_SMC8216C    0x2b
  771. #define ED_TYPE_WD8013EBP    0x2c
  772.  
  773. /* Bit definitions in card ID */
  774. #define    ED_WD_REV_MASK        0x1f        /* Revision mask */
  775. #define    ED_WD_SOFTCONFIG    0x20        /* Soft config */
  776. #define    ED_WD_LARGERAM        0x40        /* Large RAM */
  777. #define    ED_MICROCHANEL        0x80        /* Microchannel bus (vs. isa) */
  778.  
  779. /*
  780.  * Checksum total. All 8 bytes in station address PROM will add up to this
  781.  */
  782. #ifdef TOSH_ETHER
  783. #define ED_WD_ROM_CHECKSUM_TOTAL    0xA5
  784. #else
  785. #define ED_WD_ROM_CHECKSUM_TOTAL    0xFF
  786. #endif
  787.  
  788. #define ED_WD_NIC_OFFSET    0x10        /* I/O base offset to NIC */
  789. #define ED_WD_ASIC_OFFSET    0        /* I/O base offset to ASIC */
  790. #define ED_WD_IO_PORTS        32        /* # of i/o addresses used */
  791.  
  792. #define ED_WD_PAGE_OFFSET    0    /* page offset for NIC access to mem */
  793.  
  794. /*
  795.  *            Definitions for 3Com 3c503
  796.  */
  797. #define ED_3COM_NIC_OFFSET    0
  798. #define ED_3COM_ASIC_OFFSET    0x400        /* offset to nic i/o regs */
  799.  
  800. /*
  801.  * XXX - The I/O address range is fragmented in the 3c503; this is the
  802.  *    number of regs at iobase.
  803.  */
  804. #define ED_3COM_IO_PORTS    16        /* # of i/o addresses used */
  805.  
  806. /* tx memory starts in second bank on 8bit cards */
  807. #define ED_3COM_TX_PAGE_OFFSET_8BIT    0x20
  808.  
  809. /* tx memory starts in first bank on 16bit cards */
  810. #define ED_3COM_TX_PAGE_OFFSET_16BIT    0x0
  811.  
  812. /* ...and rx memory starts in second bank */
  813. #define ED_3COM_RX_PAGE_OFFSET_16BIT    0x20
  814.  
  815.  
  816. /*
  817.  *    Page Start Register. Must match PSTART in NIC
  818.  */
  819. #define ED_3COM_PSTR        0
  820.  
  821. /*
  822.  *    Page Stop Register. Must match PSTOP in NIC
  823.  */
  824. #define ED_3COM_PSPR        1
  825.  
  826. /*
  827.  *    Drq Timer Register. Determines number of bytes to be transfered during
  828.  *        a DMA burst.
  829.  */
  830. #define ED_3COM_DQTR        2
  831.  
  832. /*
  833.  *    Base Configuration Register. Read-only register which contains the
  834.  *        board-configured I/O base address of the adapter. Bit encoded.
  835.  */
  836. #define ED_3COM_BCFR        3
  837.  
  838. #define ED_3COM_BCFR_2E0    0x01
  839. #define ED_3COM_BCFR_2A0    0x02
  840. #define ED_3COM_BCFR_280    0x04
  841. #define ED_3COM_BCFR_250    0x08
  842. #define ED_3COM_BCFR_350    0x10
  843. #define ED_3COM_BCFR_330    0x20
  844. #define ED_3COM_BCFR_310    0x40
  845. #define ED_3COM_BCFR_300    0x80
  846.  
  847. /*
  848.  *    EPROM Configuration Register. Read-only register which contains the
  849.  *        board-configured memory base address. Bit encoded.
  850.  */
  851. #define ED_3COM_PCFR        4
  852.  
  853. #define ED_3COM_PCFR_C8000    0x10
  854. #define ED_3COM_PCFR_CC000    0x20
  855. #define ED_3COM_PCFR_D8000    0x40
  856. #define ED_3COM_PCFR_DC000    0x80
  857.  
  858. /*
  859.  *    GA Configuration Register. Gate-Array Configuration Register.
  860.  */
  861. #define ED_3COM_GACFR        5
  862.  
  863. /*
  864.  * mbs2  mbs1  mbs0        start address
  865.  *  0     0     0        0x0000
  866.  *  0     0     1        0x2000
  867.  *  0     1     0        0x4000
  868.  *  0     1     1        0x6000
  869.  *
  870.  *    Note that with adapters with only 8K, the setting for 0x2000 must
  871.  *        always be used.
  872.  */
  873. #define ED_3COM_GACFR_MBS0    0x01
  874. #define ED_3COM_GACFR_MBS1    0x02
  875. #define ED_3COM_GACFR_MBS2    0x04
  876.  
  877. #define ED_3COM_GACFR_RSEL    0x08    /* enable shared memory */
  878. #define ED_3COM_GACFR_TEST    0x10    /* for GA testing */
  879. #define ED_3COM_GACFR_OWS    0x20    /* select 0WS access to GA */
  880. #define ED_3COM_GACFR_TCM    0x40    /* Mask DMA interrupts */
  881. #define ED_3COM_GACFR_NIM    0x80    /* Mask NIC interrupts */
  882.  
  883. /*
  884.  *    Control Register. Miscellaneous control functions.
  885.  */
  886. #define ED_3COM_CR        6
  887.  
  888. #define ED_3COM_CR_RST        0x01    /* Reset GA and NIC */
  889. #define ED_3COM_CR_XSEL        0x02    /* Transceiver select. BNC=1(def) AUI=0 */
  890. #define ED_3COM_CR_EALO        0x04    /* window EA PROM 0-15 to I/O base */
  891. #define ED_3COM_CR_EAHI        0x08    /* window EA PROM 16-31 to I/O base */
  892. #define ED_3COM_CR_SHARE    0x10    /* select interrupt sharing option */
  893. #define ED_3COM_CR_DBSEL    0x20    /* Double buffer select */
  894. #define ED_3COM_CR_DDIR        0x40    /* DMA direction select */
  895. #define ED_3COM_CR_START    0x80    /* Start DMA controller */
  896.  
  897. /*
  898.  *    Status Register. Miscellaneous status information.
  899.  */
  900. #define ED_3COM_STREG        7
  901.  
  902. #define ED_3COM_STREG_REV    0x07    /* GA revision */
  903. #define ED_3COM_STREG_DIP    0x08    /* DMA in progress */
  904. #define ED_3COM_STREG_DTC    0x10    /* DMA terminal count */
  905. #define ED_3COM_STREG_OFLW    0x20    /* Overflow */
  906. #define ED_3COM_STREG_UFLW    0x40    /* Underflow */
  907. #define ED_3COM_STREG_DPRDY    0x80    /* Data port ready */
  908.  
  909. /*
  910.  *    Interrupt/DMA Configuration Register
  911.  */
  912. #define ED_3COM_IDCFR        8
  913.  
  914. #define ED_3COM_IDCFR_DRQ0    0x01    /* DMA request 1 select */
  915. #define ED_3COM_IDCFR_DRQ1    0x02    /* DMA request 2 select */
  916. #define ED_3COM_IDCFR_DRQ2    0x04    /* DMA request 3 select */
  917. #define ED_3COM_IDCFR_UNUSED    0x08    /* not used */
  918. #define ED_3COM_IDCFR_IRQ2    0x10    /* Interrupt request 2 select */
  919. #define ED_3COM_IDCFR_IRQ3    0x20    /* Interrupt request 3 select */
  920. #define ED_3COM_IDCFR_IRQ4    0x40    /* Interrupt request 4 select */
  921. #define ED_3COM_IDCFR_IRQ5    0x80    /* Interrupt request 5 select */
  922.  
  923. /*
  924.  *    DMA Address Register MSB
  925.  */
  926. #define ED_3COM_DAMSB        9
  927.  
  928. /*
  929.  *    DMA Address Register LSB
  930.  */
  931. #define ED_3COM_DALSB        0x0a
  932.  
  933. /*
  934.  *    Vector Pointer Register 2
  935.  */
  936. #define ED_3COM_VPTR2        0x0b
  937.  
  938. /*
  939.  *    Vector Pointer Register 1
  940.  */
  941. #define ED_3COM_VPTR1        0x0c
  942.  
  943. /*
  944.  *    Vector Pointer Register 0
  945.  */
  946. #define ED_3COM_VPTR0        0x0d
  947.  
  948. /*
  949.  *    Register File Access MSB
  950.  */
  951. #define ED_3COM_RFMSB        0x0e
  952.  
  953. /*
  954.  *    Register File Access LSB
  955.  */
  956. #define ED_3COM_RFLSB        0x0f
  957.  
  958. /*
  959.  *         Definitions for Novell NE1000/2000 boards
  960.  */
  961.  
  962. /*
  963.  * Board type codes
  964.  */
  965. #define ED_TYPE_NE1000        0x01
  966. #define ED_TYPE_NE2000        0x02
  967.  
  968. /*
  969.  * Register offsets/total
  970.  */
  971. #define ED_NOVELL_NIC_OFFSET    0x00
  972. #define ED_NOVELL_ASIC_OFFSET    0x10
  973. #define ED_NOVELL_IO_PORTS    32
  974.  
  975. /*
  976.  * Remote DMA data register; for reading or writing to the NIC mem
  977.  *    via programmed I/O (offset from ASIC base)
  978.  */
  979. #define ED_NOVELL_DATA        0x00
  980.  
  981. /*
  982.  * Reset register; reading from this register causes a board reset
  983.  */
  984. #define ED_NOVELL_RESET        0x0f
  985.  
  986. /*
  987.  *        Definitions for PCCARD
  988.  */
  989. #define ED_PC_PAGE_OFFSET    0x40    /* page offset for NIC access to mem */
  990. #define ED_PC_IO_PORTS        32
  991. #define ED_PC_RESET        0x1f
  992. #define ED_PC_MISC        0x18
  993.  
  994. /* 
  995.  * if_ze.h  constants
  996.  */
  997.  
  998. #define ZE_PAGE_OFFSET        0x40    /* mem buffer starts at 0x4000 */
  999.  
  1000. #define ZE_DATA_IO    0x10
  1001. #define ZE_MISC        0x18
  1002. #define ZE_RESET    0x1F
  1003.  
  1004.